package com.zwh.algorithm.leetcode.medium;

import java.util.Arrays;

public class LeetCode1911 {
    /**
     * 2023-07-11  最大子序列交替和
     * todo 一个下标从 0 开始的数组的 交替和 定义为 偶数 下标处元素之 和 减去 奇数 下标处元素之 和 。
     * todo 比方说，数组 [4,2,5,3] 的交替和为 (4 + 5) - (2 + 3) = 4 。
     * todo 给你一个数组 nums ，请你返回 nums 中任意子序列的 最大交替和 （子序列的下标 重新 从 0 开始编号）。
     * todo 一个数组的 子序列是从原数组中删除一些元素后（也可能一个也不删除）剩余元素不改变顺序组成的数组。
     * todo 比方说，[2,7,4]是[4,2,3,7,2,1,4]的一个子序列（加粗元素），但是[2,4,2] 不是。
     */
    public static void main(String[] args) {
        System.out.println(maxAlternatingSum(new int[]{4,2,5,3}));
    }

    /**
     * 动态规划
     * @param nums
     * @return
     */
    public static long maxAlternatingSum(int[] nums) {
        long enve = nums[0]; long odd = 0;
        for (int i = 1; i < nums.length; i++) {
            enve = Math.max(enve,nums[i]+odd);
            odd = Math.max(odd,enve-nums[i]);
        }
        return enve;
    }

}
